API Gateway で統合タイムアウト時間を変更する方法を教えてください
困っていた内容
Amazon API Gateway を使用して REST API を構築しています。タイムアウトの設定を行なっており、API Gateway からバックエンド(Lambda)へのタイムアウト値を設定したいのですが、任意の値に変更はできますか。変更できる場合は変更方法を教えてください。
どう対応すればいいの?
統合リクエストの設定から変更できます。
API Gateway から、バックエンドへのタイムアウト時間の変更はサポートされており、現時点で 50 ミリ秒〜29 秒の間の任意の値に設定できます。
変更は API Gateway コンソールから実施でき、現時点のデフォルト状態では29秒に設定されています。
統合のタイムアウト
Lambda、Lambda プロキシ、HTTP、HTTP プロキシ、AWS 統合など、すべての統合タイプで 50 ミリ秒〜29 秒。
やってみた
API Gateway コンソールを開き、変更したい API をクリック
リソース -> 変更したいメソッドの順にクリック
「統合リクエスト」をクリック
「デフォルトタイムアウトの使用」のチェックを外す
「カスタムタイムアウト」の入力欄が表示されるので、任意のタイムアウト時間(ミリ秒)を入力し、チェックを選択
チェックが消えたことを確認します。
※チェックが残った状態で画面を移動すると変更内容はキャンセルされるため、ご注意ください
タイムアウト値の変更後は、API をデプロイして変更内容を反映します。
参考:API Gateway で REST API をデプロイします。 - Amazon API Gateway
実際の挙動
リクエストの返却まで60秒を要する API に、変更前・変更後それぞれで curl でタイムアウトまでの時間を計測した結果です。
変更前は29秒、変更後は設定した5秒でタイムアウトとなりました。
# 変更前(デフォルト値:29秒) $ curl -w "Time: %{time_total}\n" -o /dev/null -s 'https://01234567ab.execute-api.ap-northeast-1.amazonaws.com/prod/resources01' Time: 29.214223 # 変更後(5秒) $ curl -w "Time: %{time_total}\n" -o /dev/null -s 'https://01234567ab.execute-api.ap-northeast-1.amazonaws.com/prod/resources01' Time: 5.138301
参考:curlでパフォーマンス測定 | DevelopersIO